# To change this template, choose Tools | Templates
# and open the template in the editor.

require 'rubygems'
require 'dbf'
require 'persona'
require 'sexo'
require 'estado_civil'
require 'garantia'
require 'local'
require 'cuota'
require 'credito'
require 'empleado'

ActiveRecord::Base.establish_connection(
  :adapter => "postgresql",
  :database => "bernardoCreditos_dev",
  :username => "postgres",
  :password => "postgres",
  :host=> "localhost",
  :port=> "5432",
  :pool=> "5",
  :encoding => "utf8"
)

ActiveSupport::Inflector.inflections do |inflect|
  inflect.plural /([aeiou])([A-Z]|_|$)/, '\1s\2'
  inflect.plural /([rlnd])([A-Z]|_|$)/, '\1es\2'
  inflect.singular /([aeiou])s([A-Z]|_|$)/, '\1\2'
  inflect.singular /([rlnd])es([A-Z]|_|$)/, '\1\2'
  inflect.irregular 'user', 'users'
  inflect.irregular 'account', 'accounts'
  inflect.irregular 'password', 'passwords'
  inflect.irregular 'session', 'sessions'
end

puts "Arranca: #{Time.now}"

#Se limpian las tablas releacionadas con la migracion
Garantia.delete_all
Persona.delete_all
Cuota.delete_all
Credito.delete_all
Empleado.delete_all

#cargo archivo
tabla = DBF::Table.new("C:/datos.dbf")

cantidad_total = 0
cantidad_ok = 0
cantidad_error = 0

#itero sobre todas las personas
tabla.each do |registro|
  begin
    cantidad_total += 1

    #Defino el sexo
    case registro.sexo
    when /F*/
      sexo = Sexo.find(:first, :conditions => "descripcion='Femenino'")
    when /M*/
      sexo = Sexo.find(:first, :conditions => "descripcion='Masculino'")
    else
      sexo = nil
      puts "Antencion, no encontre el sexo para el valor: #{registro.sexo} de la persona: #{registro.ci}"
    end

    #Defino el estado civil
    case registro.est_civ
    when /CA*/
      estado_civil = EstadoCivil.find(:first, :conditions => "descripcion='Casado/a)'")
    when /SO*/
      estado_civil = EstadoCivil.find(:first, :conditions => "descripcion='Soltero/a'")
    when /DI*/
      estado_civil = EstadoCivil.find(:first, :conditions => "descripcion='Divorciado/a'")
    when /VI*/
      estado_civil = EstadoCivil.find(:first, :conditions => "descripcion='Viudo/a'")
    when ""
      estado_civil = nil
    else
      estado_civil = nil
      puts "Antencion, no encontre el estado civil para el valor: #{registro.est_civ} de la persona: #{registro.ci}"
    end

    #Defino el conyugue
    conyugue_temp = nil
    str = registro.nom_con
    if str != nil and str.length > 0
      conyugue_temp = str
      str = registro.trab_con
      if str != nil and str.length > 0
        conyugue_temp += " - Trabajo: #{str}"
      end
    end

    Persona.new do |p|
      p.cedula = registro.ci
      p.nombres = "#{registro.nom_uno} #{registro.nom_dos}"
      #p.apellidos = "#{registro.ape_uno} #{registro.ape_dos}"
      p.sexo = sexo
      p.estado_civil = estado_civil
      p.fecha_nacimiento = registro.fe_nac
      p.telefono = registro.tel
      p.propietario = registro.propie
      p.alquiler = registro.alquiler
      p.cantidad_creditos = registro.ult_cre
      #p.observaciones = registro.obs
      p.operando = registro.operando
      #p.direccion_temp = "Dir: #{registro.direccion} - Calle: #{registro.calle} - Puerta: #{registro.puerta} - CodCalle: #{registro.codcalle} - Esq: #{registro.esquina} - Postal: #{registro.cod_pos}"
      #p.trabajo_temp = "Nombre: #{registro.trabajo} - Dir: #{registro.dir_trab} - Tel: #{registro.tel_trab} - Cargo: #{registro.cargo}"
      #p.conyugue_temp = conyugue_temp
      p.sueldo_temp = registro.sueldo
      p.cuenta_temp = registro.cuenta
      p.save
    end

    cantidad_ok += 1

  rescue Exception => exc
    cantidad_error += 1
    STDERR.puts "Error al dar de alta a la persona #{registro.ci} - #{registro.ape_uno} + #{registro.ape_dos}, Error: #{exc.message}"
  end
end

puts "Termina: #{Time.now}"
puts "Se procesaron #{cantidad_total} de registros"
puts "Cantidad de inserts OK: #{cantidad_ok}"
puts "Cantidad de ERRORES: #{cantidad_error}"

=begin
tabla.each do |registro|
  persona = Persona.find(:first, :conditions => "cedula='#{registro.ci}'")
  if persona == nil
    puts "no encontre a la persona #{registro.ci}"
  end
end
=end

#Cargo la garantia de la persona
=begin
tabla.each do |registro|
  persona = Persona.find(:first, :conditions => "cedula='#{registro.ci}'")
  if persona == nil
    puts "no encontre a la persona #{registro.ci}"
  end
end
=end


=begin
persona1 = Persona.create
persona1.nombres = "Pablo Rrodriguez"
persona1.save

persona2 = Persona.create
persona2.nombres = "Natalia Casella"
persona2.save

persona3 = Persona.create
persona3.nombres = "Pablo Marrero"
persona3.save

garantia = Garantia.create
garantia.garante = persona1
garantia.beneficiario = persona2
garantia.save

garantia = Garantia.create
garantia.garante = persona1
garantia.beneficiario = persona3
garantia.save

garantia = Garantia.create
garantia.garante = persona2
garantia.beneficiario = persona3
garantia.save

puts "#{persona1.nombres} es garante de: "
persona1.garantia_beneficiarios.each do |p|
puts "#{p.beneficiario.nombres}"
end

puts "#{persona2.nombres} es beneficiario de: "
persona2.garantia_garantes.each do |p|
puts "#{p.garante.nombres}"
end

puts "#{persona3.nombres} es beneficiario de: "
persona3.garantia_garantes.each do |p|
puts "#{p.garante.nombres}"
end
=end
